SQL (Structured Query Language) ব্যবহার করে ডেটাবেস থেকে তথ্য বের করার জন্য বিভিন্ন ধরনের কুয়েরি ব্যবহার করা হয়। কিছু কুয়েরি যেমন Join অপারেটর এবং Complex Queries খুবই শক্তিশালী টুল যা বিভিন্ন টেবিল থেকে ডেটা একত্রিত করে এবং আরও গভীর বিশ্লেষণ করা সম্ভব করে। এখানে Complex Queries এবং বিভিন্ন ধরনের Joins এর উপর আলোচনা করা হলো।
1. Complex Queries
Complex Queries বলতে এমন SQL কুয়েরি বোঝায়, যা একাধিক টেবিল থেকে ডেটা সংগ্রহ করে, একাধিক শর্ত প্রয়োগ করে, বিভিন্ন ফাংশন ব্যবহার করে, বা একাধিক সাবকুয়েরি (Subqueries) ব্যবহার করে। এসব কুয়েরি সাধারণত জটিল এবং বড় ডেটাসেটের মধ্যে বিস্তারিত তথ্য বের করতে ব্যবহৃত হয়।
উদাহরণ: Subquery এর ব্যবহার
SELECT first_name, last_name
FROM employees
WHERE employee_id IN (
SELECT employee_id
FROM departments
WHERE department_name = 'Sales'
);
এখানে, Subquery প্রথমে departments টেবিল থেকে Sales ডিপার্টমেন্টের সমস্ত employee_id বের করবে এবং তারপর মূল কুয়েরি সেই employee_id এর ভিত্তিতে employees টেবিল থেকে নাম বের করবে।
2. Joins
SQL Join অপারেটর ব্যবহার করে একাধিক টেবিল থেকে সম্পর্কিত ডেটা একত্রিত করা যায়। বিভিন্ন ধরনের Joins এর মাধ্যমে টেবিলগুলোর মধ্যে সম্পর্ক স্থাপন এবং ডেটা একত্রিত করা হয়। মূলত ৪টি ধরনের Join রয়েছে:
a. INNER JOIN
INNER JOIN হলো সবচেয়ে সাধারণ এবং প্রচলিত ধরনের Join, যা শুধুমাত্র দুইটি টেবিলের এমন রেকর্ডগুলো ফেরত দেয় যেগুলোর মধ্যে সম্পর্কিত (matching) মান রয়েছে।
- বৈশিষ্ট্য: INNER JOIN শুধুমাত্র সেই রেকর্ডগুলো ফেরত দেয় যেগুলো দুইটি টেবিলের মধ্যে মিলে যায়। যদি কোন রেকর্ডের মিল না থাকে, তাহলে তা রেজাল্টে অন্তর্ভুক্ত হয় না।
উদাহরণ:
SELECT employees.first_name, employees.last_name, departments.department_name
FROM employees
INNER JOIN departments ON employees.department_id = departments.department_id;
এখানে employees টেবিলের department_id কলাম এবং departments টেবিলের department_id কলামের মধ্যে সম্পর্ক রয়েছে, এবং মিল পাওয়া রেকর্ডগুলোর প্রথম নাম, শেষ নাম এবং ডিপার্টমেন্ট নাম ফেরত দেবে।
b. LEFT JOIN (LEFT OUTER JOIN)
LEFT JOIN বা LEFT OUTER JOIN একটি এমন Join যেখানে প্রথম টেবিল (বাঁ দিকের টেবিল) এর সমস্ত রেকর্ডই অন্তর্ভুক্ত থাকবে, এবং দ্বিতীয় টেবিলের সাথে সম্পর্কিত রেকর্ড থাকলে তা যুক্ত হবে। যদি দ্বিতীয় টেবিলের সাথে কোনো সম্পর্ক না থাকে, তবে সেই টেবিলের কলামগুলোর মান NULL হয়ে যাবে।
- বৈশিষ্ট্য: এটি বাম দিকের (LEFT) টেবিলের সমস্ত রেকর্ড এবং ডান দিকের (RIGHT) টেবিলের মিলিত রেকর্ডগুলো ফিরিয়ে আনে। যদি ডান দিকের টেবিলে মিল না থাকে, তবে ডান দিকের কলামগুলো
NULLহবে।
উদাহরণ:
SELECT employees.first_name, employees.last_name, departments.department_name
FROM employees
LEFT JOIN departments ON employees.department_id = departments.department_id;
এখানে employees টেবিলের সকল রেকর্ড থাকবে, এবং departments টেবিলের সাথে সম্পর্কিত ডিপার্টমেন্ট নামও থাকবে। যদি কোনো employee এর জন্য ডিপার্টমেন্ট না থাকে, তবে সেই employee এর জন্য ডিপার্টমেন্ট কলামে NULL দেখাবে।
c. RIGHT JOIN (RIGHT OUTER JOIN)
RIGHT JOIN বা RIGHT OUTER JOIN ঠিক LEFT JOIN এর বিপরীত। এখানে, ডান (RIGHT) টেবিলের সমস্ত রেকর্ড থাকবে এবং বাম (LEFT) টেবিলের সাথে সম্পর্কিত রেকর্ড পাওয়া গেলে তা দেখাবে। যদি সম্পর্ক না পাওয়া যায়, তবে বাম টেবিলের কলামগুলো NULL হবে।
- বৈশিষ্ট্য: এটি ডান (RIGHT) টেবিলের সমস্ত রেকর্ড এবং বাম (LEFT) টেবিলের মিলিত রেকর্ডগুলো ফিরিয়ে আনে। যদি বাম টেবিলের সাথে সম্পর্ক না থাকে, তবে বাম টেবিলের কলামগুলো
NULLহবে।
উদাহরণ:
SELECT employees.first_name, employees.last_name, departments.department_name
FROM employees
RIGHT JOIN departments ON employees.department_id = departments.department_id;
এখানে departments টেবিলের সকল রেকর্ড থাকবে এবং employees টেবিলের সাথে সম্পর্কিত কর্মচারীদের নাম দেখাবে। যদি কোনো ডিপার্টমেন্টে কর্মচারী না থাকে, তবে সেই ডিপার্টমেন্টের জন্য NULL দেখাবে।
d. FULL JOIN (FULL OUTER JOIN)
FULL JOIN বা FULL OUTER JOIN হলো একটি Join যা দুইটি টেবিলের সকল রেকর্ডকে অন্তর্ভুক্ত করে, যদি সম্পর্ক পাওয়া যায় তাহলে দুটি টেবিলের তথ্য একত্রিত করে দেখাবে, অন্যথায় একটি টেবিলের জন্য NULL দেখাবে।
- বৈশিষ্ট্য: এটি দুইটি টেবিলের সমস্ত রেকর্ড সমন্বিত করে। যেখানে মিল পাওয়া যায় সেখানে সম্পর্কিত তথ্য দেখাবে এবং যেখানেই মিল না পাওয়া যায় সেখানে
NULLদেখাবে।
উদাহরণ:
SELECT employees.first_name, employees.last_name, departments.department_name
FROM employees
FULL OUTER JOIN departments ON employees.department_id = departments.department_id;
এখানে employees এবং departments টেবিলের সমস্ত রেকর্ড আনা হবে। যদি কোন employee বা department এর জন্য সম্পর্ক না থাকে, তবে তা NULL হবে।
Complex Query with Joins Example
একটি Complex Query এর উদাহরণ যেখানে INNER JOIN, LEFT JOIN এবং Subquery ব্যবহার করা হয়েছে:
SELECT employees.first_name, employees.last_name, departments.department_name,
(SELECT COUNT(*) FROM employees e WHERE e.department_id = employees.department_id) AS department_count
FROM employees
INNER JOIN departments ON employees.department_id = departments.department_id
LEFT JOIN salaries ON employees.employee_id = salaries.employee_id
WHERE salaries.salary > 50000;
এখানে:
- INNER JOIN ব্যবহার করা হয়েছে
employeesএবংdepartmentsটেবিলের মধ্যে সম্পর্ক স্থাপনের জন্য। - LEFT JOIN ব্যবহার করা হয়েছে
employeesএবংsalariesটেবিলের মধ্যে সম্পর্ক স্থাপনের জন্য, যেখানে শুধুমাত্র উচ্চ বেতন (৫০০০০ এর বেশি) এর কর্মচারীদের দেখানো হয়েছে। - একটি Subquery ব্যবহার করা হয়েছে, যা প্রতিটি ডিপার্টমেন্টে কর্মচারীদের সংখ্যা বের করবে।
সারাংশ
- INNER JOIN: শুধুমাত্র মিল পাওয়া রেকর্ডগুলি ফেরত দেয়।
- LEFT JOIN: প্রথম টেবিলের সমস্ত রেকর্ড এবং মিলিত রেকর্ড দেয়, অন্যথায়
NULL। - RIGHT JOIN: দ্বিতীয় টেবিলের সমস্ত রেকর্ড এবং মিলিত রেকর্ড দেয়, অন্যথায়
NULL। - FULL JOIN: দুইটি টেবিলের সমস্ত রেকর্ডের সংমিশ্রণ দেয়, যেখানে মিল না থাকে সেখানে
NULLদেখায়। - Complex Queries: বিভিন্ন ধরনের Join, Subquery এবং ফাংশন ব্যবহার করে আরও জটিল এবং বিশ্লেষণমূলক কুয়েরি তৈরি করা যায়।
SQL Join এবং Complex Queries ডেটাবেস থেকে তথ্য আরও গভীরভাবে বিশ্লেষণ এবং একত্রিত করতে সাহায্য করে।
Read more